home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cpp_libs / answrbok / 3_14.lha / 3_14 / 3_14d.c < prev    next >
Text File  |  1993-08-08  |  911b  |  45 lines

  1. * Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */
  2. * The C++ Answer Book */
  3. * Tony Hansen */
  4. * All rights reserved. */
  5. / case NAME:
  6. / ...
  7.    else if (curr_tok == LP)    // function calls
  8. {
  9. /cerr << "prim: case NAME: LP\n";        /* DELETE */
  10. name *n = look(name_string);
  11. if (n->nargs == variable)
  12.     return error("not a function");
  13. get_token();    // skip LP
  14.  
  15. double e[maxargs];
  16. int i = 0;
  17. if (curr_tok != RP)
  18.     e[i++] = expr();
  19.  
  20. while (curr_tok == COMMA)
  21.     {
  22.     get_token();    // skip COMMA
  23.     e[i++] = expr();
  24.     if (i == maxargs)
  25.     break;
  26.     }
  27.  
  28. if (curr_tok != RP)
  29.     return error(") expected");
  30. get_token();        // skip RP
  31.  
  32. if (n->nargs == interp_func)    // function defn
  33.     {
  34.     while (i < maxargs)
  35.     e[i++] = 0;
  36.     return interpfunc(e, n->funcdefn);
  37.     }
  38.  
  39. else if (n->nargs != i)
  40.     return error("wrong number of arguments");
  41.  
  42. else            // built-in function
  43.     return (*n->funcptr)(e);
  44. }
  45.